package sockets;

import javax.swing.JTextArea;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.io.IOException;
import java.net.InetAddress;

/*
 * @author Danilo
 * @author Julio
 */
 
public class ServidorUDP extends Thread {
    // Variavel responsavel por determinar a porta de comunicação com o cliente.
    protected int portaUDP;
    
    // Variavel responsável por mostrar na tela as mensagens de comunicação com o servidor.
    protected JTextArea servidorOut;
    public ServidorUDP(JTextArea saida ){
        servidorOut = saida;
    }

    @Override
    public void run(){
        while(true){
		
                try{
                    // Cria um socket com um ponto recebimento de pacotes. 
                    DatagramSocket socketIn = new DatagramSocket(portaUDP);
                    
                    // Cria um vetor de byte.
                    byte [] dadosIn = new byte [1024];
                    
                    // Cria um pacote para receber os dados enviados pelo clienteUDP.
                    DatagramPacket pacote = new DatagramPacket(dadosIn, dadosIn.length);
                    
                    // Receber os dados enviados pelo cliente.
                    socketIn.receive(pacote);
                    
                    // Cria uma variável que recebe o endereço de conexão entre clienteUDP e servidorUDP.
                    InetAddress address =  pacote.getAddress();
                    
                    // Cria uma variável que recebe a porta de comunicação entre clienteUDP e servidorUDP.
                    int porta = pacote.getPort();
                    
                    // Cria uma variável que recebe os pacotes enviados pelo clienteUDP.
                    String dados = new String(pacote.getData());
                    
                    // Mostra na tela que a conexão UDP foi realizada e a partir de qual porta o cliente o servido estão se comunicando.
                    servidorOut.append("Conexão UDP realizada. \nPorta:" + portaUDP + " \n");
                    
                    // Mostra na tela que a conexão UDP foi realizada a partir do endereço enserido.
                    servidorOut.append("Endereço de origem UDP: " + address + "\n");
                    
                    // Mostra na tela os dados recebidos do servidorUDP.
                    servidorOut.append("Dados recebidos pelo servidor UDP: " + dados + " \n\n");
                    
                    //fechando o socket.
                    socketIn.close();

                } catch (IOException e) {
                    }
            }
    }
}